第 1 步 - 创建状态机控制应用程序状态

在本教程的这一步骤中,您创建状态机控制切换按钮,该按钮可打开/关闭显示身体、腿部和挡风玻璃的空调指示灯。您将创建设置指示灯何时可见的状态组和状态。您还将创建用于控制空调档位指示灯的属性类型。

教程资产

<KanziWorkspace>/Tutorials/State managers/Completed 目录包含本教程已完成的 Kanzi Studio 工程。

本教程的起点资料是存储在 <KanziWorkspace>/Tutorials/State managers/Assets 目录中的 State managers.kzproj Kanzi Studio 工程。该工程包含完成本教程所需的节点:

为空调状态创建状态机

您可以使用状态机在应用程序中创建不同的状态。例如,您可以定义不同状态下按钮的外观和行为,例如当用户按下开按钮时,按钮如何反应。
在本节中,您将在应用程序中创建状态机和状态组,以控制空调指示灯的状态。使用状态机设置每个切换按钮中的图像何时可见。

要创建状态机:

  1. Kanzi Studio 中打开存储在 <KanziWorkspace>/Tutorials/State managers/Assets 目录中的 State managers.kzproj 工程。
  2. 素材库 (Library) 按下 Alt 并右键点击状态机 (State Managers) 中,选择状态机 (State Manager) 以创建状态机,并将其命名为 AC Controls

  3. 素材库 (Library) > 状态机 (State Managers) > AC Controls 中,选择状态组 (State Group),按下 F2 并将其重命名为 Indicators,将这两个状态重命名为 OnOff
    状态组包含各种状态,定义控制器属性和状态组中状态之间的迁移。使用Indicators 状态组设置身体、腿部和挡风玻璃指示灯图像何时可见。
  4. 素材库 (Library) > 状态机 (State Managers) > AC Controls 中选择 Indicators 状态组并在属性 (Properties) 中设置:
  5. 素材库 (Library) > 状态机 (State Managers) > AC Controls > Indicators 中选择On 状态并在属性 (Properties) 中将切换状态 (Toggle State) 属性设置为 1
    切换状态 (Toggle State) 属性在Off 状态默认设置为 0。
  6. On 状态按下 Alt 并右键点击,选择状态对象 (State Object) 以创建 状态对象 (State Object),将其命名为 IndicatorVisible,并在属性 (Properties) 中:

    状态对象定义特定状态的节点属性。在工程 (Project) 中,BodyLegsShield 节点各包含一张名为图像 (Image) 的图像。目标对象路径 (Target Object Path) 指向所有这些图像,并将其设置为可见。

  7. Off 状态重复上一步骤,但将状态对象命名为 IndicatorInvisible,确保可见性 (Visible) 属性被禁用。
  8. 工程 (Project) 中选择 LegsBodyShield 节点,在属性 (Properties) 中添加状态机 (State Manager) 属性,并将其设置为 AC Controls
    通过设置状态机 (State Manager) 属性值,您可以设置状态机以控制所选节点及其子树。这种情况下,设置 AC Controls 状态机,以控制设置空调状态的指示灯按钮。

定义档位按钮的状态

在本节中,您将学习创建属性类型,将其用于档位按钮的触发器中,来设置档位指示灯的状态。在AC Controls 状态机中创建另一个状态组。该状态组控制显示当前空调档位的指示灯。

要定义档位按钮的状态:

  1. 素材库 (Library) > 属性类型 (Property Types)按下 Alt 并右键点击以创建属性类型,并在属性类型编辑器 (Property Type Editor) 中设置:

    点击保存 (Save)

  2. 素材库 (Library) > 状态机 (State Managers)按下 Alt 并右键点击AC Controls状态机,选择 状态组 (State Group) 并将其命名为 Level
    使用 Level 状态组控制当用户点击档位按钮时哪些档位指示灯可见。

  3. 素材库 (Library) > 状态机 (State Managers) > AC Controls 中选择 Level 状态组,并在属性 (Properties) 中将控制器属性 (Controller Property) 设置为Statemanagers.Level
  4. Level 状态组创建状态,并将其命名为 1,设置当应用程序处于该状态时哪些指示灯可见:
    1. 选择Level > 1 状态并在属性 (Properties) 中将控制器属性 (Controller Property) 设置为Level 1
    2. Level > 1 状态为三张用于指示空调档位的图像各创建一个 状态对象 (State Object)
      • AC Active Level 2
      • AC Active Level 3
      • AC Active Level 4

      1 档 (Level 1) 无需状态机中的状态对象 (State Object),因为当用户打开空调时使用图像将第一个指示条显示为绿色。

    3. 对于属性 (Properties) 中的每个状态对象 (State Object),将目标对象路径 (Target Object Path) 设置为指向工程 (Project) > AirCondition level > Level buttons 中的正确图像:
      • 对于 AC Active Level 2,将目标对象路径 (Target Object Path) 设置为Level 2/AC Active Level 2 节点
      • 对于 AC Active Level 3,将目标对象路径 (Target Object Path) 设置为Level 3/AC Active Level 3 节点
      • 对于 AC Active Level 4,将目标对象路径 (Target Object Path) 设置为Level 4/AC Active Level 4 节点
    4. 对于每个状态对象 (State Object) 添加可见性 (Visible) 属性,并确保已禁用。
      当应用程序处于 1 状态,档位指示灯不可见。
  5. Level 状态组中选择 1 状态,按下 Ctrl D 三次以复制该状态,并将这三个状态命名为 234
  6. 选择在上一步骤中创建的每个新状态,在属性 (Properties) 中设置 控制器属性 (Controller Property)
  7. 设置在各状态下哪些档位按钮可见:
  8. 工程 (Project) 中选择 AirCondition level > Level buttons,在属性 (Properties) 中添加状态机 (State Manager),并将其设置为 AC Controls
    您可以设置状态机以控制所选节点及其子树。这种情况下,设置 AC Controls 状态机,以控制设置空调档位的指示灯按钮。
  9. 为档位按钮创建触发器,以打开/关闭指示灯:
    1. 工程 (Project) 中选择 Level 1 按钮,在节点组件 (Node Components) 部分的按钮: 点击 (Button:Click) 触发器中点击添加 (Add)下拉菜单,选择设置属性 (Set Property) 动作,然后设置:
      • 目标项 (Target Item)<Relative> ..
      • 目标属性 (Target Property)Statemanagers.Level
      • 目标属性特性 (Target Property Attribute)整体属性 (Whole property)
      • 起始值 (Value From)固定值 (Fixed Value)
      • 固定值 (Fixed Value)Level 1
      使用设置属性 (Set Property) 动作设置当 Statemanagers.Level 属性值更改时应用程序的状态。
    2. 节点组件 (Node Components) 中右键点击按钮: 点击 (Button:Click) 触发器并选择复制 (Copy)
    3. 工程 (Project) 中粘贴触发器到 Level 2Level 3Level 4 节点,但在设置属性 (Set Property) 动作中将固定值 (Fixed Value) 设置为 Level 2Level 3Level 4

< 简介
下一步 >

另请参阅

状态机

使用状态机

使用状态迁移

创建属性类型